home *** CD-ROM | disk | FTP | other *** search
/ MacGames Sampler / PHT MacGames Bundle.iso / MacSource Folder / Samples from the CD / C and C++ / POSIX / ThinkCPosix / Perror.c < prev    next >
Text File  |  1992-09-18  |  2KB  |  61 lines

  1. /* $Id: $ */
  2.  
  3. /*
  4.  *  Perror.c
  5.  *
  6.  *  Copyright (c) 1991 Symantec Corporation.  All rights reserved.
  7.  *  Modified (from perror.c) by Timothy Murphy <tim@maths.tcd.ie>
  8.  *  to give meaningful error messages.
  9.  *
  10.  */
  11.  
  12. #include "stdio.h"
  13. #include "string.h"
  14. #include "errno.h"
  15. #include "ThinkCPosix.h"
  16. #include "ansi_private.h"
  17.  
  18. static void error(FILE *, int);
  19.  
  20.  
  21. void
  22. Perror(char *s)
  23. {
  24.     int i = errno;
  25.     
  26.     if (s && *s)
  27.         fprintf(stderr, "%s: ", s);
  28.     error(stderr, i);
  29.     fputc('\n', stderr);
  30. }
  31.  
  32.  
  33. static void
  34. error(FILE *fp, int i)
  35. {
  36.     switch(i) {
  37.     case ENOTDIR:    fprintf(fp, "ENOTDIR"); break;
  38.     case EACCES:    fprintf(fp, "Permission denied"); break;
  39.     case EEXIST:    fprintf(fp, "File already exists"); break;
  40.     case EBUSY:        fprintf(fp, "File busy"); break;
  41.     case EROFS:        fprintf(fp, "EROFS"); break;
  42.     case ENOENT:    fprintf(fp, "No such file or directory"); break;
  43.     case ENFILE:    fprintf(fp, "ENFILE"); break;
  44.     case EIO:        fprintf(fp, "EIO"); break;
  45.     case ENOSPC:    fprintf(fp, "ENOSPC"); break;
  46.  
  47.     case ESRCH:        fprintf(fp, "ESRCH"); break;
  48.     case EINTR:        fprintf(fp, "EINTR"); break;
  49.     case EBADF:        fprintf(fp, "Bad file number"); break;
  50.     case ENODEV:    fprintf(fp, "No such device"); break;
  51.     case EINVAL:    fprintf(fp, "Invalid argument"); break;
  52.     case EMFILE:    fprintf(fp, "Too many open files"); break;
  53.     case EDOM:        fprintf(fp, "Domain error"); break;
  54.     case ERANGE:    fprintf(fp, "Result too large"); break;
  55.     case ENOSYS:    fprintf(fp, "Function not implemented"); break;
  56.     case ENOEXEC:    fprintf(fp, "Exec format error"); break;
  57.     case EPERM:        fprintf(fp, "Operation not permitted"); break;
  58.     default:        fprintf(fp, "Unknown error %d", i);
  59.     }
  60. }
  61.